/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.liquidByte.trafficMustang.server.dao;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.Root;
import org.liquidByte.trafficMustang.server.dataModel.*;
import org.liquidByte.trafficMustang.server.dataModel.enums.TrechoSituacao;
import org.liquidByte.trafficMustang.server.repository.TrechoRepository;

/**
 *
 * @author Alexandre
 */
@Stateless
public class TrechoDAO extends PersistableDAO<Trecho> implements TrechoRepository {

    public TrechoDAO() {
        super(Trecho.class);
    }

    public List<Trecho> get(Passageiro passageiro, TrechoSituacao... situacao) {
        EntityManager em = this.getEntityManager();
        CriteriaBuilder cb = em.getCriteriaBuilder();
        
        CriteriaQuery<Trecho> q = cb.createQuery(Trecho.class);
        Root<Trecho> root = q.from(Trecho.class);
        q.select(root).where(cb.equal(root.get("pasgId"), passageiro),
                             root.get("trecSitId").in((Object[])situacao));
        
        return em.createQuery(q).getResultList();
    }

    public List<Trecho> get(Motorista motorista, TrechoSituacao... situacao) {
        EntityManager em = this.getEntityManager();
        CriteriaBuilder cb = em.getCriteriaBuilder();
        
        CriteriaQuery<Trecho> q = cb.createQuery(Trecho.class);
        Root<Trecho> root = q.from(Trecho.class);
        q.select(root);
        Join<Trecho, Deslocamento> desloc = root.join("deslcId");
        
        q.where(cb.equal(desloc.get("motrId"), motorista),
                root.get("trecSitId").in((Object[])situacao));

        return em.createQuery(q).getResultList();
    }

    @Override
    public void persist(Trecho object) {
        super.persist(object);
        this.getEntityManager().refresh(object.getDeslcId());
    }
}
